home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / qtawk / sincos.exp < prev    next >
Text File  |  1990-02-10  |  3KB  |  110 lines

  1. # greph - processor for a graph-drawing language
  2. #  input: data and specification of a graph
  3. #  output: data plotted in specified area
  4. # AWK page 137
  5. #
  6. # display sine and cosine curves - no input accepted
  7.  
  8. BEGIN { #set frame dimensions ...
  9.     OFMT = "%.4g";
  10.     ht = 23; wid = 79;    # height and width
  11.     ox = 6; oy = 2;    # offset for x and y axes
  12.     xmin = 0;
  13.     xmax = 2*pi;
  14.     ymin = -1.25;
  15.     ymax = 1.25;
  16.     x_inc = pi/200;
  17.     pi2 = 2*pi;
  18.     for ( x = 0.0 ; x <= pi2 ; x += x_inc ) {
  19.     xs = xscale(x);
  20.     plot(xs,yscale(sin(x)),'s');
  21.     plot(xs,yscale(cos(x)),'c');
  22.     }
  23.     botlab = "Sine/Cosine Curves";
  24.     nl = 9;
  25.     nb = 8;
  26.     lticks[9] = 1.;
  27.     lticks[8] = .75;
  28.     lticks[7] = .5;
  29.     lticks[6] = .25;
  30.     lticks[5] = 0.0;
  31.     lticks[4] = -.25;
  32.     lticks[3] = -.5;
  33.     lticks[2] = -.75;
  34.     lticks[1] = -1.;
  35.  
  36.     bticks[8] = 7*pi/4;
  37.     bticks[7] = 3*pi/2;
  38.     bticks[6] = 5*pi/4;
  39.     bticks[5] = pi;
  40.     bticks[4] = 3*pi/4;
  41.     bticks[3] = pi/2;
  42.     bticks[2] = pi/4;
  43.     bticks[1] = 0.0;
  44.  
  45.     frame; ticks; label; data; draw;
  46. }
  47.  
  48. function frame() {  # create frame for graph
  49.     local i, j;
  50.  
  51.     for ( i = ox+1 ; i < wid ; i++ ) plot(i,oy,"─");      # bottom
  52.     for ( i = ox+1 ; i < wid ; i++ ) plot(i,ht-1,"─");    # top
  53.     for ( i = oy+1 ; i < ht  ; i++ ) plot(ox,i,"│");      # left
  54.     for ( i = oy+1 ; i < ht  ; i++ ) plot(wid-1,i,"│");   # right
  55.     plot(ox,ht-1,"┌");
  56.     plot(wid-1,ht-1,"┐");
  57.     plot(ox,oy,"└");
  58.     plot(wid-1,oy,"┘");
  59. }
  60.  
  61. function ticks() {  # create tick marks for both axes
  62.     local i;
  63.     local xys;
  64.  
  65.     for ( i = 1 ; i <= nb ; i++ ) {
  66.     xys = xscale(bticks[i]);
  67.     plot(xys,oy,"┼");
  68.        splot(xys - 1,1,bticks[i]);
  69.     }
  70.     for ( i = 1 ; i <= nl ; i++ ) {
  71.     xys = yscale(lticks[i]);
  72.     plot(ox,xys,"┼");
  73.        splot(0,xys,lticks[i]);
  74.     }
  75. }
  76.  
  77. function label() {  # center label under x-axis
  78.     splot((wid + ox - length(botlab))/2,0,botlab);
  79. }
  80.  
  81. function draw() {   # print graph from array
  82.     local i, j;
  83.  
  84.     for ( i = ht - 1 ; i >= 0 ; i-- ) {
  85.     for ( j = 0 ; j < wid ; j++ )
  86.       printf( j in array && i in array[j] ? array[j][i] : " " );
  87.     printf("\n");
  88.     }
  89. }
  90.  
  91. function xscale(x) {    # scale x-value
  92.     return int((x - xmin + 0.0)/(xmax - xmin) * (wid - 1.0 - ox) + ox + 0.5);
  93. }
  94.  
  95. function yscale(y) {    # scale y-value
  96.     return int((y - ymin + 0.0)/(ymax - ymin) * (ht  - 1.0 - oy) + oy + 0.5);
  97. }
  98.  
  99. function plot(x,y,c) {    # put character c in array
  100.     array[x][y] = c;
  101. }
  102.  
  103. function splot(x,y,s) { # put string s in array
  104.     local i, n = length(s);
  105.     local str = s "";
  106.  
  107.     for ( i = 0 ; i < n ; i++ )
  108.       array[x+i][y] = substr(str,i+1,1);
  109. }
  110.